package com.pubsys.main.client.componentes.monografiafields;

import java.util.ArrayList;

import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.IntegerBox;
import com.pubsys.main.client.componentes.campodados.IntTextBox;
import com.pubsys.main.client.componentes.campodados.ValueTextBox;
import com.pubsys.main.shared.model.Autor;
import com.pubsys.main.shared.model.Monografia;
import com.pubsys.main.shared.model.Monografia.TYPE_MONOGRAFIA;
import com.pubsys.main.shared.model.Referencia;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.Window;
import java.util.Date;
import com.pubsys.main.client.componentes.campodados.DataListBox;

public class CamposMonografiaWidget extends Composite {

	private static CamposMonografiaWidgetUiBinder uiBinder = GWT
			.create(CamposMonografiaWidgetUiBinder.class);
	@UiField ListBox tipoAbrangenciaListBox;
	@UiField ListBox tipoComplResumidaListBox;
	@UiField TextBox tituloTextBox;
	//@UiField ListBox tipoResumoListBox;
	@UiField Label tipoResumoLabel;
	@UiField TextBox autoresTextBox;
	@UiField TextBox localTextBox;
	@UiField TextBox editoraTextBox;
	@UiField TextBox revisorTextBox;
	@UiField TextBox colecaoTextBox;
	@UiField ListBox tipoResumoListBox;
	@UiField Image iconObrigTipoRes;
	@UiField IntTextBox anoIntTextBox;
	@UiField IntTextBox edicaoIntTextBox;
	@UiField AbsolutePanel painelForms;
	@UiField IntTextBox nroPagIntTextBox;
	@UiField TextBox codigoTextBox;
	@UiField IntTextBox volumeIntTextBox;
	@UiField DataListBox dataListBox;
	@UiField TextBox paginaDispTextBox;
	@UiField DataListBox dataAcessoDataListBox;
	
	private TYPE_MONOGRAFIA tipoMonografia;
	

	interface CamposMonografiaWidgetUiBinder extends
			UiBinder<Widget, CamposMonografiaWidget> {
	}

	public CamposMonografiaWidget(int tipoMonografia) {
		initWidget(uiBinder.createAndBindUi(this));
		setTipoMonografia(tipoMonografia);
		iniCampos();
	//	campo3TextBox = new ValueTextBox(0,0,2000);
	}
	
	private void setTipoMonografia(int tipo){
		if(tipo == 0) this.tipoMonografia = TYPE_MONOGRAFIA.PROCEEDING;
		else if(tipo == 1) this.tipoMonografia = TYPE_MONOGRAFIA.COLLENTION;
		else this.tipoMonografia = TYPE_MONOGRAFIA.BOOK;
	}
	
	private void iniCampos(){
		tipoAbrangenciaListBox.addItem("Nacional");
		tipoAbrangenciaListBox.addItem("Internacional");
		
		tipoComplResumidaListBox.addItem("Completa");
		tipoComplResumidaListBox.addItem("Resumida");
		
		tipoResumoListBox.addItem("Simples");
		tipoResumoListBox.addItem("Expandido");
		
		tipoResumoLabel.setVisible(false);
		tipoResumoListBox.setVisible(false);
		iconObrigTipoRes.setVisible(false);
		
		//campo12TextBox = new ValueTextBox();
		//grid.setWidget(13, 1, new IntTextBox());
		//painelData = new IntTextBox();
	}

	public Monografia getMonografia(){
		
		Monografia monografia = new Monografia();
		monografia.setTipoMonografia(tipoMonografia);
		
		if (this.tituloTextBox.getText().trim().equals("")){
			Window.alert("Favor inserir título válido");
			this.tituloTextBox.setFocus(true);
			return null;
		}
		monografia.setTitulo(this.tituloTextBox.getText().trim());
		
		if (this.autoresTextBox.getText().trim().equals("")){
			Window.alert("Favor inserir ao menos um autor");
			this.autoresTextBox.setFocus(true);
			return null;
		}
		monografia.setAutores(this.pegaAutoresDoForm());
		
		if (this.localTextBox.getText().trim().equals("")){
			Window.alert("Favor inserir local de publicação válido");
			this.localTextBox.setFocus(true);
			return null;
		}
		monografia.setLocal(this.localTextBox.getText().trim());
		
		Date data = new Date();
		int ano = 1900 + data.getYear();
		if ((this.anoIntTextBox.getInt() <1900) || (this.anoIntTextBox.getInt() > ano)){
			Window.alert("Favor inserir ano de publicação válido");
			this.anoIntTextBox.setFocus(true);
			return null;
		}
		monografia.setAno(this.anoIntTextBox.getInt());
		
		if (this.editoraTextBox.getText().trim().equals("")){
			Window.alert("Favor inserir editora válida");
			this.editoraTextBox.setFocus(true);
			return null;
		}
		monografia.setEditora(this.editoraTextBox.getText().trim());
		
		if (this.edicaoIntTextBox.getText().trim().equals("")){
			Window.alert("Favor inserir edicao de publicação válido");
			this.edicaoIntTextBox.setFocus(true);
			return null;
		}
		monografia.setEdicao(this.edicaoIntTextBox.getText().trim());
		
		if (this.revisorTextBox.getText().trim().equals("")){
			monografia.setTradutorRevisor(null);
		} else {
			monografia.setTradutorRevisor(this.pegaTraduresRevisoresDoForm());
		}
		
		if (this.volumeIntTextBox.getText().trim().equals("")){
			monografia.setTradutorRevisor(null);
		} else {
			monografia.setNroVol(this.volumeIntTextBox.getText().trim());
		}
		
		if (this.colecaoTextBox.getText().trim().equals("")){
			monografia.setTradutorRevisor(null);
		} else {
			monografia.setNroVol(this.colecaoTextBox.getText().trim());
		}
		
		if(tipoAbrangenciaListBox.getSelectedIndex() == 0) monografia.setAbrangencia(Referencia.ABRANG.NACIONAL);
		else monografia.setAbrangencia(Referencia.ABRANG.INTERNACIONAL);
		
		if(tipoResumoListBox.getSelectedIndex() == 0) monografia.setTipoResumo(Referencia.TYPE_RESUMO.SIMPLES);
		else monografia.setTipoResumo(Referencia.TYPE_RESUMO.EXPANDIDO);
		
		if(tipoComplResumidaListBox.getSelectedIndex() == 0) {
			monografia.setTipoCR(Referencia.TYPE_COMP_RES.COMPLETA);
			monografia.setTipoResumo(Referencia.TYPE_RESUMO.NONE);
		}
		else monografia.setTipoCR(Referencia.TYPE_COMP_RES.RESUMIDA);
		
		monografia.setDataPub(dataListBox.getData());
		
		if (this.codigoTextBox.getText().trim().equals("")){
			Window.alert("Favor inserir código de publicação válido");
			this.codigoTextBox.setFocus(true);
			return null;
		}
		monografia.setCodigo(this.codigoTextBox.getText().trim());
		
		if (this.paginaDispTextBox.getText().trim().equals("")){
			monografia.setPaginaDisp(null);
			monografia.setDataAcesso(null);			
		} else {
			monografia.setPaginaDisp(this.paginaDispTextBox.getText().trim());
			monografia.setDataAcesso(this.dataAcessoDataListBox.getData());
		}
		
	//	monografia.set
		
		return monografia;
	}
	
	private ArrayList<Autor> pegaAutoresDoForm() {
		ArrayList<Autor> autores = new ArrayList<Autor>();
		String autoresNames[] = this.autoresTextBox.getText().split(",");
		for (String string : autoresNames) {
			Autor autor = new Autor(string.trim());
			autores.add(autor);
		}		
		return autores;
	}
	
	private ArrayList<Autor> pegaTraduresRevisoresDoForm() {
		ArrayList<Autor> revisores = new ArrayList<Autor>();
		String autoresNames[] = this.revisorTextBox.getText().split(",");
		for (String string : autoresNames) {
			Autor autor = new Autor(string.trim());
			revisores.add(autor);
		}		
		return revisores;
	}
	
	@UiHandler("tipoComplResumidaListBox")
	void onTipoComplResumidaListBoxChange(ChangeEvent event) {
		int itemSelecionado = tipoComplResumidaListBox.getSelectedIndex();
		
		if( selecionadoResumido(itemSelecionado) ){
			tipoResumoLabel.setVisible(true);
			tipoResumoListBox.setVisible(true);
			iconObrigTipoRes.setVisible(true);
		}
		else {
			tipoResumoLabel.setVisible(false);
			tipoResumoListBox.setVisible(false);
			iconObrigTipoRes.setVisible(false);
		}
	}
	
	private boolean selecionadoResumido(int item){
		boolean ehVerdade = false;
		
		if(item == 1) ehVerdade = true;
		
		return ehVerdade;
	}

	
	/**
	 * seta os campos do form conforme uma instancia de referncia
	 * @param ref
	 */
	public void setReferencia(Referencia ref) {

//		if (ref.getId() != null && ref.getId() > 0)
//			this.idReferenciaAtual = ref.getId();
		
		this.tituloTextBox.setText(ref.getTitulo());
		String autores = "", virgula = "";
		if (ref.getAutores() != null && ref.getAutores().size() > 0){
			for (Autor autor : ref.getAutores()) {
				autores += virgula + " " + autor.getNome();
				virgula = ",";
			}
			this.autoresTextBox.setText(autores);
		}
		this.localTextBox.setText(ref.getLocal());
		this.editoraTextBox.setText(ref.getEditora());
		this.anoIntTextBox.setValue(ref.getAno());
		this.codigoTextBox.setText(ref.getCodigo());
		if (ref.getEdicao() != null)
			this.edicaoIntTextBox.setValue(Integer.parseInt(ref.getEdicao()));
		if (ref.getNroPaginas() != null)
			this.nroPagIntTextBox.setValue(Integer.parseInt(ref.getNroPaginas()));
		
		if (ref.getNroVolume() != null)
			this.volumeIntTextBox.setValue(Integer.parseInt(ref.getNroVolume()));
	}
}
